package com.quanxiaoha.weblog.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.quanxiaoha.weblog.common.domain.dos.FavoriteArticleFolderRelDO;

import java.util.List;
import java.util.Objects;

/**
 * 收藏文章与收藏夹关联Mapper
 */
public interface FavoriteArticleFolderRelMapper extends BaseMapper<FavoriteArticleFolderRelDO> {

    /**
     * 根据收藏记录ID查询关联关系
     * @param favoriteId 收藏记录ID
     * @return 关联关系列表
     */
    default List<FavoriteArticleFolderRelDO> selectByFavoriteId(Long favoriteId) {
        LambdaQueryWrapper<FavoriteArticleFolderRelDO> wrapper = Wrappers.<FavoriteArticleFolderRelDO>lambdaQuery()
                .eq(Objects.nonNull(favoriteId), FavoriteArticleFolderRelDO::getFavoriteId, favoriteId)
                .orderByDesc(FavoriteArticleFolderRelDO::getCreateTime);
        return selectList(wrapper);
    }

    /**
     * 根据收藏夹ID查询关联关系
     * @param folderId 收藏夹ID
     * @return 关联关系列表
     */
    default List<FavoriteArticleFolderRelDO> selectByFolderId(Long folderId) {
        LambdaQueryWrapper<FavoriteArticleFolderRelDO> wrapper = Wrappers.<FavoriteArticleFolderRelDO>lambdaQuery()
                .eq(Objects.nonNull(folderId), FavoriteArticleFolderRelDO::getFolderId, folderId)
                .orderByDesc(FavoriteArticleFolderRelDO::getCreateTime);
        return selectList(wrapper);
    }

    /**
     * 查询特定收藏记录和收藏夹的关联关系
     * @param favoriteId 收藏记录ID
     * @param folderId 收藏夹ID
     * @return 关联关系
     */
    default FavoriteArticleFolderRelDO selectByFavoriteAndFolder(Long favoriteId, Long folderId) {
        LambdaQueryWrapper<FavoriteArticleFolderRelDO> wrapper = Wrappers.<FavoriteArticleFolderRelDO>lambdaQuery()
                .eq(Objects.nonNull(favoriteId), FavoriteArticleFolderRelDO::getFavoriteId, favoriteId)
                .eq(Objects.nonNull(folderId), FavoriteArticleFolderRelDO::getFolderId, folderId);
        return selectOne(wrapper);
    }

    /**
     * 删除收藏记录的所有关联关系
     * @param favoriteId 收藏记录ID
     * @return 删除的记录数
     */
    default int deleteByFavoriteId(Long favoriteId) {
        LambdaQueryWrapper<FavoriteArticleFolderRelDO> wrapper = Wrappers.<FavoriteArticleFolderRelDO>lambdaQuery()
                .eq(Objects.nonNull(favoriteId), FavoriteArticleFolderRelDO::getFavoriteId, favoriteId);
        return delete(wrapper);
    }

    /**
     * 删除收藏夹的所有关联关系
     * @param folderId 收藏夹ID
     * @return 删除的记录数
     */
    default int deleteByFolderId(Long folderId) {
        LambdaQueryWrapper<FavoriteArticleFolderRelDO> wrapper = Wrappers.<FavoriteArticleFolderRelDO>lambdaQuery()
                .eq(Objects.nonNull(folderId), FavoriteArticleFolderRelDO::getFolderId, folderId);
        return delete(wrapper);
    }
}
